package model

import (
	"poker/db"

	"go.mongodb.org/mongo-driver/bson"
)

type Order struct {
	ID         string `json:"customId" bson:"_id" binding:"required"`
	UID        string `json:"uid" bson:"uid"`     // 用户id
	AppID      string `json:"appid" bson:"appid"` // 小游戏appid
	ExtraInfo  string `json:"extraInfo" bson:"extra_info"`
	Status     string `json:"status"` // 订单状态，CREATED创建 SUCCESS 成功，FAIL 失败
	UpdateDate string `bson:"update_date"`
}

type OrderSuccessPayInfo struct {
	Appid          string `json:"appid"`            // 小游戏appid
	CpOrderNo      string `json:"cp_orderno"`       // 开发者自定义订单号
	CpExtra        string `json:"cp_extra"`         // 开发者传的额外参数
	OrderNoChannel string `json:"order_no_channel"` // 小游戏后台交易单号
	Amount         int64  `json:"amount_cent"`      // 订单金额，单位人民币分
	BuyQuantity    int64  `json:"amount_coin"`      // 购买游戏币数量
	Currency       string `json:"currency"`         // 支付币种，CNY 人民币，DIAMOND 钻石
}

type OrderInfo struct {
	Timestamp string `json:"timestamp"` // 时间戳
	Nonce     string `json:"nonce"`     // 随机数
	Msg       string `json:"msg"`       // 包体
	Signature string `json:"signature"` // 根据token生成的签名
	Echostr   string `json:"echostr "`
}

// 请求参数结构体
type GetBalanceRequest struct {
	OpenID      string `json:"openid"`
	AppID       string `json:"appid"`
	OfferID     string `json:"offer_id,omitempty"`
	Ts          int64  `json:"ts"`
	ZoneID      string `json:"zone_id"`
	Pf          string `json:"pf"`
	UserIP      string `json:"user_ip,omitempty"`
	Sig         string `json:"sig,omitempty"`
	AccessToken string `json:"access_token"`
	Mp_sig      string `json:"mp_sig"`
}

// 响应参数结构体
type GetBalanceResponse struct {
	ErrCode    int     `json:"errcode"`
	ErrMsg     string  `json:"errmsg"`
	Balance    float64 `json:"balance"`
	GenBalance float64 `json:"gen_balance"`
	SaveAmt    float64 `json:"save_amt"`
	SaveSum    float64 `json:"save_sum"`
	CostSum    float64 `json:"cost_sum"`
	PresentSum float64 `json:"present_sum"`
}

// UploadPayInfoRequest
type UploadPayInfoRequest struct {
	GoodsName   string `json:"goodsName"`   // 商品名称
	GoodsId     string `json:"goodsId"`     // 商品编号
	OrderId     string `json:"orderId"`     // 订单编号
	GoodsAmount int    `json:"goodsAmount"` // 金额（分）
	Param       string `json:"param"`       // 额外参数
	UserId      string `json:"userId"`      // 用户id
	PhoneSystem string `json:"phoneSystem"` // 系统
	PlaceTime   string `json:"placeTime"`   // 下单时间戳10位
	UserName    string `json:"userName"`    // 用户名
	OpenId      string `json:"openId"`      // openid
	AppId       string `json:"appId"`       // 应用id
}

func (order *Order) Save() error {
	return db.InsertOne("order", order)
}

func (order *Order) FindOne(filter interface{}) error {
	return db.FindOne("order", filter, order)
}

func (u *Order) UpdateOne(filter interface{}) error {
	update := bson.M{"$set": bson.M{"status": u.Status, "update_date": u.UpdateDate}}
	return db.UpdateOne("order", filter, update)
}

func GetOrdersByUid(uid string) ([]Order, error) {
	var orders []Order
	filter := bson.M{"uid": uid, "status": 0}
	err := db.Find("order", filter, &orders)
	if err != nil {
		return nil, err
	}
	return orders, nil
}
